home *** CD-ROM | disk | FTP | other *** search
/ GFX Sensations 1 / Graphic Sensations - Volume 1.iso / tools / amiga / editors / tsm30s.lha / TSM30s.lha / ControlWindow.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-24  |  19.2 KB  |  641 lines

  1. // TSMorph - Amiga Morphing program
  2. // Copyright (C) © 1993  Topicsave Limited
  3.  
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // any later version.
  8.  
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13.  
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. // mpaddock@cix.compulink.co.uk
  19.  
  20. // Include precompiled headers if not already included
  21. #ifndef TSMORPH_H
  22. #include "TSMorph.h"
  23. #endif
  24.  
  25. /* Gadgets in the control window */
  26. extern struct Gadget OneGadget = {
  27.     &TwoGadget,
  28.     0,0,
  29.     IMAGE_WIDTH,IMAGE_HEIGHT,
  30.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  31.     GACT_IMMEDIATE,
  32.     GTYP_BOOLGADGET,
  33.     &One_im,
  34.     &One_imx,
  35.     NULL,
  36.     0,
  37.     NULL,
  38.     ONEGADGET,
  39.     NULL
  40. };
  41. extern struct Gadget TwoGadget = {
  42.     &RelGadget,
  43.     0,0,
  44.     IMAGE_WIDTH,IMAGE_HEIGHT,
  45.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  46.     GACT_IMMEDIATE,
  47.     GTYP_BOOLGADGET,
  48.     &Two_im,
  49.     &Two_imx,
  50.     NULL,
  51.     0,
  52.     NULL,
  53.     TWOGADGET,
  54.     NULL
  55. };
  56. extern struct Gadget RelGadget = {
  57.     &MyAddGadget,
  58.     0,0,
  59.     IMAGE_WIDTH,IMAGE_HEIGHT,
  60.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  61.     GACT_IMMEDIATE,
  62.     GTYP_BOOLGADGET,
  63.     &Rel_im,
  64.     &Rel_imx,
  65.     NULL,
  66.     0,
  67.     NULL,
  68.     RELGADGET,
  69.     NULL
  70. };
  71. extern struct Gadget MyAddGadget = {    // Note not AddGadget as this is a function!
  72.     &DelGadget,
  73.     0,0,
  74.     IMAGE_WIDTH,IMAGE_HEIGHT,
  75.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  76.     GACT_IMMEDIATE,
  77.     GTYP_BOOLGADGET,
  78.     &Add_im,
  79.     &Add_imx,
  80.     NULL,
  81.     0,
  82.     NULL,
  83.     ADDGADGET,
  84.     NULL
  85. };
  86. extern struct Gadget DelGadget = {
  87.     &LinkGadget,
  88.     0,0,
  89.     IMAGE_WIDTH,IMAGE_HEIGHT,
  90.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  91.     GACT_IMMEDIATE,
  92.     GTYP_BOOLGADGET,
  93.     &Del_im,
  94.     &Del_imx,
  95.     NULL,
  96.     0,
  97.     NULL,
  98.     DELGADGET,
  99.     NULL
  100. };
  101. extern struct Gadget LinkGadget = {
  102.     &UnlinkGadget,
  103.     0,0,
  104.     IMAGE_WIDTH,IMAGE_HEIGHT,
  105.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  106.     GACT_IMMEDIATE,
  107.     GTYP_BOOLGADGET,
  108.     &Link_im,
  109.     &Link_imx,
  110.     NULL,
  111.     0,
  112.     NULL,
  113.     LINKGADGET,
  114.     NULL
  115. };
  116. extern struct Gadget UnlinkGadget = {
  117.     &NoneGadget,
  118.     0,0,
  119.     IMAGE_WIDTH,IMAGE_HEIGHT,
  120.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  121.     GACT_IMMEDIATE,
  122.     GTYP_BOOLGADGET,
  123.     &Unlink_im,
  124.     &Unlink_imx,
  125.     NULL,
  126.     0,
  127.     NULL,
  128.     UNLINKGADGET,
  129.     NULL
  130. };
  131. extern struct Gadget NoneGadget = {
  132.     &stGadget,
  133.     0,0,
  134.     IMAGE_WIDTH,IMAGE_HEIGHT,
  135.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE|GFLG_SELECTED,
  136.     GACT_IMMEDIATE,
  137.     GTYP_BOOLGADGET,
  138.     &None_im,
  139.     &None_imx,
  140.     NULL,
  141.     0,
  142.     NULL,
  143.     NONEGADGET,
  144.     NULL
  145. };
  146. extern struct Gadget stGadget = {
  147.     &prevGadget,
  148.     0,0,
  149.     AIMAGE,AIMAGE,
  150.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  151.     GACT_RELVERIFY,
  152.     GTYP_BOOLGADGET,
  153.     &st_im,
  154.     &st_imx,
  155.     NULL,
  156.     0,
  157.     NULL,
  158.     STGADGET,
  159.     NULL
  160. };
  161. extern struct Gadget prevGadget = {
  162.     &gotoGadget,
  163.     0,0,
  164.     AIMAGE,AIMAGE,
  165.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  166.     GACT_RELVERIFY,
  167.     GTYP_BOOLGADGET,
  168.     &prev_im,
  169.     &prev_imx,
  170.     NULL,
  171.     0,
  172.     NULL,
  173.     PREVGADGET,
  174.     NULL
  175. };
  176. extern struct Gadget gotoGadget = {
  177.     &nextGadget,
  178.     0,0,
  179.     AIMAGE+1,AIMAGE,
  180.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  181.     GACT_RELVERIFY,
  182.     GTYP_BOOLGADGET,
  183.     &goto_im,
  184.     &goto_imx,
  185.     NULL,
  186.     0,
  187.     NULL,
  188.     GOTOGADGET,
  189.     NULL
  190. };
  191. extern struct Gadget nextGadget = {
  192.     &lastGadget,
  193.     0,0,
  194.     AIMAGE,AIMAGE,
  195.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  196.     GACT_RELVERIFY,
  197.     GTYP_BOOLGADGET,
  198.     &next_im,
  199.     &next_imx,
  200.     NULL,
  201.     0,
  202.     NULL,
  203.     NEXTGADGET,
  204.     NULL
  205. };
  206. extern struct Gadget lastGadget = {
  207.     NULL,
  208.     0,0,
  209.     AIMAGE,AIMAGE,
  210.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  211.     GACT_RELVERIFY,
  212.     GTYP_BOOLGADGET,
  213.     &last_im,
  214.     &last_imx,
  215.     NULL,
  216.     0,
  217.     NULL,
  218.     LASTGADGET,
  219.     NULL
  220. };
  221.  
  222. /* Menu for the Control Window - comments on the right are the array index */
  223. extern struct NewMenu MyNewMenu[] = {    // There must be an easier way!
  224.     { NM_TITLE, NULL,NULL,0,0,NULL },            // 0
  225.         { NM_ITEM,NULL,NULL,0,0,0 },            // 1
  226.         { NM_ITEM,NULL,NULL,0,0,0 },    // 2
  227.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 3
  228.        { NM_ITEM,NULL,NULL,0,0,0},                    // 4
  229.        { NM_ITEM,NULL,NULL,0,0,0},            // 5
  230.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 6
  231.         { NM_ITEM,NULL,NULL,0,0,0 },            // 7
  232.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 8
  233.         { NM_ITEM,NULL,NULL,0,0,0 },        // 9
  234.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 10
  235.         { NM_ITEM,NULL,NULL,0,0,0 },                    // 11
  236.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 12
  237.         { NM_ITEM,NULL,NULL,0,0,NULL },    // 13
  238.     { NM_TITLE, NULL,0,0,0,NULL},                    // 14
  239.         { NM_ITEM,NULL,NULL,0,0,0 },        // 15
  240.         { NM_ITEM,NULL,NULL,0,0,0 },        // 16
  241.        { NM_ITEM,NULL,NULL,0,0,NULL },            // 17
  242.             { NM_SUB,NULL,NULL,0,0,0 },                // 18
  243.             { NM_SUB,NULL,NULL,0,0,0 },            // 19
  244.             { NM_SUB,NULL,NULL,0,0,0 },            // 20
  245.             { NM_SUB,NULL,NULL,0,0,0 },                // 21
  246.             { NM_SUB,NULL,NULL,0,0,0 },                // 22
  247.         { NM_ITEM,NULL,0,0,0,NULL },                                        // 23
  248.             { NM_SUB, NULL,NULL,CHECKIT,~1,NULL },                    // 24
  249.             { NM_SUB, NULL,NULL,CHECKIT,~2,NULL },                    // 25
  250.             { NM_SUB, NULL,NULL,CHECKIT,~4,NULL },                    // 26
  251.             { NM_SUB, NULL,     NULL,CHECKIT,~8,NULL },                    // 27
  252.             { NM_SUB, NULL,  NULL,CHECKIT,~16,NULL },                    // 28
  253.             { NM_SUB, NULL,    NULL,CHECKIT,~32,NULL },                    // 29
  254.             { NM_SUB, NULL,  NULL,CHECKIT,~64,NULL },                    // 30
  255.             { NM_SUB, NULL,    NULL,CHECKIT|CHECKED,~128,NULL },        // 31
  256.     { NM_TITLE, NULL,0,0,0,NULL },                                    //    32
  257.         { NM_ITEM,NULL,NULL, CHECKIT|MENUTOGGLE,0,NULL },            // 33
  258.         { NM_ITEM,NULL,NULL, CHECKIT|MENUTOGGLE,0,NULL },            // 34
  259.         { NM_ITEM,NULL,NULL, CHECKIT|MENUTOGGLE,0,NULL },            //             35
  260.         { NM_ITEM,NULL,NULL,0,NULL},                                    //                36
  261.             { NM_SUB, NULL,NULL,CHECKIT,~1,NULL },                //                37
  262.             { NM_SUB, NULL,NULL,CHECKIT,~2,NULL },            //                38
  263.             { NM_SUB, NULL,NULL,CHECKIT,~4,NULL },        //                39
  264.             { NM_SUB, NULL,NULL,CHECKIT,~8,NULL },                        //                40
  265.             { NM_SUB, NULL,NULL,CHECKIT,~16,NULL },                        //                41
  266.         { NM_ITEM,NULL,NULL,0,NULL},                        //                42
  267.         { NM_ITEM,NULL,NULL,0,NULL},                            //                43
  268.         { NM_ITEM,NULL,NULL,0,NULL},                            //                44
  269.         { NM_ITEM,NULL,NULL,0,NULL},                        //                45
  270.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },                                //             46
  271.        { NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL},//            47
  272.        { NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL},    //                48
  273.         { NM_ITEM,NULL, NULL, 0, NULL },                    //             49
  274.        { NM_ITEM,NULL, NULL, 0, NULL },                        //             50
  275.        { NM_ITEM,NULL, NULL, 0, NULL },                //             51
  276.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },                                //             52
  277.         { NM_ITEM,NULL,NULL, CHECKIT|MENUTOGGLE,NULL },//        53
  278.        { NM_ITEM,NULL,NULL,0,NULL},                                        //                54
  279.        { NM_ITEM,NULL,NULL,0,NULL},                                        //                55
  280.        { NM_ITEM,NULL,NULL,0,NULL},                            //                56
  281.        { NM_ITEM,NULL,NULL,0,NULL},                            //                57
  282.        { NM_ITEM,NULL,NULL,0,NULL},                            //                58
  283.        { NM_ITEM,NULL,NULL,0,NULL},                                    //                59
  284.        { NM_ITEM,NULL,NULL,0,NULL},                                        //                60
  285.             { NM_SUB, NULL,NULL,CHECKIT|MENUTOGGLE,NULL },                    //                61
  286.             { NM_SUB, NULL,NULL,CHECKIT|MENUTOGGLE,NULL },    //                62
  287.             { NM_SUB, NULL,NULL,CHECKIT|MENUTOGGLE,NULL },                //                63
  288.             { NM_SUB, NULL,NULL,CHECKIT|MENUTOGGLE,NULL },//                64
  289.             { NM_SUB, NULL,NULL,CHECKIT|MENUTOGGLE,NULL },//                65
  290.        { NM_ITEM,NULL, NULL, 0, NULL },                            //             66
  291.             { NM_SUB, NULL,NULL,CHECKIT,~1,NULL },                    //                67
  292.             { NM_SUB, NULL,NULL,CHECKIT,~2,NULL },                    //                68
  293.             { NM_SUB, NULL,NULL,CHECKIT,~4,NULL },        //                69
  294.             { NM_SUB, NULL,NULL,CHECKIT,~8,NULL },            //                70
  295.             { NM_SUB, NULL,NULL,CHECKIT,~16,NULL },    //            71
  296.             { NM_SUB, NULL,NULL,CHECKIT,~32,NULL },                //                72
  297.             { NM_SUB, NULL,NULL,CHECKIT,~64,NULL },    //                73
  298.             { NM_SUB, NULL,NULL,CHECKIT,~128,NULL },                //                74
  299.             { NM_SUB, NULL,NULL,CHECKIT,~256,NULL },                    //                75
  300.             { NM_SUB, NULL,NULL,CHECKIT,~512,NULL },                //                76
  301.             { NM_SUB, NULL,NULL,CHECKIT,~1024,NULL },                    //                77
  302.             { NM_SUB, NULL,NULL,CHECKIT,~2048,NULL },                    //                78
  303.             { NM_SUB, NULL,NULL,CHECKIT,~4096,NULL },                //                79
  304.             { NM_SUB, NULL,NULL,CHECKIT,~8192,NULL },                //                80
  305.        { NM_ITEM,NULL, NULL, 0, NULL },                    //             81
  306.        { NM_ITEM,NULL, NULL, 0, NULL },                    //                82
  307.        { NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL },        //                83
  308.        { NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL },            //                84
  309.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },                                //             85
  310.         { NM_ITEM,NULL,NULL,0,NULL },                        //                86
  311.         { NM_ITEM,NULL,NULL,0,NULL },                                //                87
  312.         { NM_ITEM,NULL,NULL,0,NULL },                                    //                88
  313.       { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },                                    //             89
  314.     { NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL },    //                90
  315.    { NM_END,NULL,NULL,0,0,NULL }
  316. };
  317.  
  318. /* Screen and VisualInfo for ControlWindow    */
  319. static struct Screen         *Screen    = NULL;
  320. static struct VisualInfo    *VisInfo    = NULL;
  321.  
  322. /* The Window and its menus and (animated) screen title    */
  323. extern struct Window            *ControlWindow    = NULL;
  324. extern struct Menu             *MyMenu             = NULL;
  325. extern UBYTE                    *CWTitle            = "                           ";    // note at least 3 spaces at end for frame number!
  326. //                                                          "TSMorph - Frame            "
  327.  
  328. /* Open the Control Window
  329.  * Not really sure why it returns a Struct Window *
  330.  * as ControlWindow is set up inside this function anyway
  331.  * should really be a BOOL
  332.  */
  333. struct Window *
  334. OpenControlWindow(void) {
  335.     ULONG HNum;            // The current edit mode is displayed as help
  336.     switch (Mode) {
  337.     case EDIT1:
  338.         HNum = H_EOne;
  339.         break;
  340.     case EDIT2:
  341.         HNum = H_ETwo;
  342.         break;
  343.     case EDITREL:
  344.         HNum = H_ERel;
  345.         break;
  346.     case ADD:
  347.         HNum = H_EAdd;
  348.         break;
  349.     case DELETE:
  350.         HNum = H_EDel;
  351.         break;
  352.     case LINK1:
  353.         HNum = H_ELnk;
  354.         break;
  355.     case UNLINK1:
  356.         HNum = H_EUnl;
  357.         break;
  358.     case NONE:
  359.         HNum = H_EMov;
  360.         break;
  361.     }
  362.     if (Screen = LockPubScreen(PubScreenName)) {        /* Supplied in PUBSCREEN=    */
  363.         // Dynamically position all the gadgets (actually only based on window top border)
  364.         /* Gadgets in the left column */
  365.         OneGadget.LeftEdge =
  366.             RelGadget.LeftEdge =
  367.             DelGadget.LeftEdge =
  368.             UnlinkGadget.LeftEdge =
  369.             stGadget.LeftEdge = Screen->WBorLeft; 
  370.         /* Gadgets in the right column */
  371.         TwoGadget.LeftEdge =
  372.             MyAddGadget.LeftEdge =
  373.             LinkGadget.LeftEdge =
  374.             NoneGadget.LeftEdge = Screen->WBorLeft + IMAGE_WIDTH;
  375.         prevGadget.LeftEdge = Screen->WBorLeft + AIMAGE;
  376.         gotoGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE);
  377.         nextGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE+AIMAGE+1);    // +1 as gotoGadget is 1 wider
  378.         lastGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE+AIMAGE+1+AIMAGE);
  379.         /* Gadgets in top row */
  380.         OneGadget.TopEdge =
  381.             TwoGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1;
  382.         /* Gadgets in 2nd row */
  383.         RelGadget.TopEdge =
  384.             MyAddGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT);
  385.         /* Gadgets in 3rd row */
  386.         DelGadget.TopEdge =
  387.             LinkGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT);
  388.         /* Gadgets in bottom (-1) row */
  389.         UnlinkGadget.TopEdge =
  390.             NoneGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT);
  391.         /* Arrow gadgets */
  392.         stGadget.TopEdge =
  393.             prevGadget.TopEdge =
  394.             gotoGadget.TopEdge =
  395.             nextGadget.TopEdge =
  396.             lastGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT);
  397.         if ((SinglePicture == 2) || (SinglePicture == 3)) {        // Animated so set screen title
  398.             sprintf(CWTitle,MyGetMsg(MSG_TSMFRAME),FrameNumber);
  399.         }
  400.         else {
  401.             strcpy(CWTitle,MyGetMsg(MSG_TSM));                                        // Otherwise default
  402.         }
  403.         /* Open the window, in a default position */
  404.         if (ControlWindow = OpenWindowTags(NULL,
  405.                                         WA_Gadgets,         &OneGadget,
  406.                                         WA_IDCMP,            IDCMP_MENUPICK | IDCMP_CLOSEWINDOW | IDCMP_MENUHELP |
  407.                                                                 IDCMP_GADGETDOWN | IDCMP_RAWKEY | IDCMP_VANILLAKEY | IDCMP_GADGETUP |
  408.                                                                 IDCMP_GADGETHELP | IDCMP_MOUSEMOVE,
  409.                                         WA_SimpleRefresh, TRUE,
  410.                                         WA_Flags,            WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET |
  411.                                                                 WFLG_NOCAREREFRESH,
  412.                                         WA_PubScreen,         Screen,
  413.                                    WA_Width,            Screen->WBorLeft + Screen->WBorRight + 
  414.                                                                (IMAGE_WIDTH+IMAGE_WIDTH),
  415.                                    WA_Height,            Screen->WBorTop + Screen->Font->ta_YSize + 1 +
  416.                                                                Screen->WBorBottom +
  417.                                                                (IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+AIMAGE),
  418.                                    WA_Left,                0,            // left edge of screen
  419.                                    WA_Top,                TSMorphWnd->TopEdge + Rect[GD_Help].MaxY + 2,
  420.                                         WA_ScreenTitle,    CWTitle,    //    Top edge means help gadget is still visible
  421.                                         WA_Title,            MyGetMsg(MSG_MOV),    // This is wrong - could be a different mode ?
  422.                                         WA_MenuHelp,        TRUE,
  423.                                         WA_NewLookMenus,    TRUE,
  424.                                         TAG_DONE)) {
  425.            if (IntuitionBase->LibNode.lib_Version > 38) {            // If running 3.0+ turn on gadget help
  426.                 HelpControl(ControlWindow,HC_GADGETHELP);
  427.             }
  428.             UpdateMenuDefs();                                        // Update the menu off/on/checks etc.
  429.          /* Create,layout and add the menu    */
  430.             if (MyMenu = CreateMenus(MyNewMenu,
  431.                                         GTMN_FullMenu,TRUE,
  432.                                         TAG_END)) {
  433.                 if (VisInfo = GetVisualInfo(Screen, TAG_END)) {
  434.                     if (LayoutMenus(MyMenu,VisInfo,
  435.                                             GTMN_NewLookMenus,TRUE,
  436.                                             TAG_END)) {
  437.                         if (SetMenuStrip(ControlWindow,MyMenu)) {
  438.                             // display either full or short help
  439.                             if (GHelp) {
  440.                                 help(HNum);
  441.                             }
  442.                             else {
  443.                                 ihelp(HNum);
  444.                             }
  445.                             MySetMode(Mode);
  446.                             return ControlWindow;        /* Success !!!                        */
  447.                         }
  448.                     }
  449.                 }
  450.             }
  451.         }
  452.     }
  453.     /* Something failed so clear everything down    */
  454.     CloseControlWindow();
  455.     return NULL;
  456. }
  457.         
  458.  
  459. /* Close the Control Window
  460.  * or at least as much as it is open
  461.  * Clearing down all variables
  462.  */
  463. void
  464. CloseControlWindow(void) {
  465.     if (ControlWindow) {
  466.         ClearMenuStrip(ControlWindow);
  467.     }
  468.     if (VisInfo) {
  469.         FreeVisualInfo(VisInfo);
  470.         VisInfo = NULL;
  471.     }
  472.     if (MyMenu) {
  473.         FreeMenus(MyMenu);
  474.         MyMenu = NULL;
  475.     }
  476.     if (ControlWindow) {
  477.         CloseWindow(ControlWindow);
  478.         ControlWindow = NULL;
  479.     }
  480.     if (Screen) {
  481.         UnlockPubScreen(NULL,Screen);
  482.         Screen = NULL;
  483.     }
  484. }
  485.  
  486. /* Update the new menu array based on the current settings
  487.  * updates enabled/disabled status
  488.  * and checkmarks
  489.  */
  490. void
  491. UpdateMenuDefs(void) {
  492.     if ((SinglePicture == 2) || (SinglePicture == 3)) {    // No frame controls if not anim
  493.       MyNewMenu[NM_FRAME].nm_Flags &= ~NM_ITEMDISABLED;
  494.     }
  495.     else {
  496.       MyNewMenu[NM_FRAME].nm_Flags |= NM_ITEMDISABLED;
  497.     }
  498.    if (CreateIcons) {                            /* Supplied in CREATEICONS=    */
  499.       MyNewMenu[NM_CREATEICONS].nm_Flags |= CHECKED;
  500.    }
  501.    else {
  502.       MyNewMenu[NM_CREATEICONS].nm_Flags &= ~CHECKED;
  503.    }
  504.    if (CreateIconsP) {                            /* Supplied in CREATEICONSP=    */
  505.       MyNewMenu[NM_ICONSP].nm_Flags |= CHECKED;
  506.    }
  507.    else {
  508.       MyNewMenu[NM_ICONSP].nm_Flags &= ~CHECKED;
  509.    }
  510.    if (KeepSettings) {                            /* Supplied in KEEPSETTINGS=    */
  511.       MyNewMenu[NM_KEEPS].nm_Flags |= CHECKED;
  512.    }
  513.    else {
  514.       MyNewMenu[NM_KEEPS].nm_Flags &= ~CHECKED;
  515.    }
  516.     if (PaletteAllowed) {                        /* Supplied in CHANGEPALETTE=    */
  517.       MyNewMenu[NM_CHANGEPALETTE].nm_Flags &= ~NM_ITEMDISABLED;
  518.     }
  519.     else {
  520.       MyNewMenu[NM_CHANGEPALETTE].nm_Flags |= NM_ITEMDISABLED;
  521.     }
  522.    if (palette) {                                    /* Supplied in CHANGEPALETTE=    */
  523.       MyNewMenu[NM_CHANGEPALETTE].nm_Flags |= CHECKED;
  524.    }
  525.    else {
  526.       MyNewMenu[NM_CHANGEPALETTE].nm_Flags &= ~CHECKED;
  527.    }
  528.     if (ZoomAllowed) {                            /* Supplied in ZOOM=                */
  529.       MyNewMenu[NM_ZOOM].nm_Flags &= ~NM_ITEMDISABLED;
  530.     }
  531.     else {
  532.       MyNewMenu[NM_ZOOM].nm_Flags |= NM_ITEMDISABLED;
  533.     }
  534.    if (Zoom) {                                        /* Supplied in ZOOM=                */
  535.       MyNewMenu[NM_ZOOM].nm_Flags |= CHECKED;
  536.    }
  537.    else {
  538.       MyNewMenu[NM_ZOOM].nm_Flags &= ~CHECKED;
  539.    }
  540.    if (AntiAlias) {                                /* Supplied in ANTIALIAS=        */
  541.       MyNewMenu[NM_ANTIALIAS].nm_Flags |= CHECKED;
  542.    }
  543.    else {
  544.       MyNewMenu[NM_ANTIALIAS].nm_Flags &= ~CHECKED;
  545.    }
  546.    if (Integer) {                                    /* Supplied in INTEGER=            */
  547.       MyNewMenu[NM_INTEGER].nm_Flags |= CHECKED;
  548.    }
  549.    else {
  550.       MyNewMenu[NM_INTEGER].nm_Flags &= ~CHECKED;
  551.    }
  552.    if (!ReqToolsBase) {                            // No reqtools.library so disable all string and int requesters
  553.        MyNewMenu[NM_SCREEN].nm_Flags |= NM_ITEMDISABLED;
  554.        MyNewMenu[NM_DX].nm_Flags |= NM_ITEMDISABLED;
  555.        MyNewMenu[NM_DY].nm_Flags |= NM_ITEMDISABLED;
  556.        MyNewMenu[NM_LOADSCRIPT].nm_Flags |= NM_ITEMDISABLED;
  557.        MyNewMenu[NM_PRESCRIPT].nm_Flags |= NM_ITEMDISABLED;
  558.        MyNewMenu[NM_POSTSCRIPT].nm_Flags |= NM_ITEMDISABLED;
  559.        MyNewMenu[NM_DEPTH].nm_Flags |= NM_ITEMDISABLED;
  560.        MyNewMenu[NM_QUALITY].nm_Flags |= NM_ITEMDISABLED;
  561.        MyNewMenu[NM_SCREENR].nm_Flags |= NM_ITEMDISABLED;
  562.        MyNewMenu[NM_PPREVIEW].nm_Flags |= NM_ITEMDISABLED;
  563.        MyNewMenu[NM_SPREVIEW].nm_Flags |= NM_ITEMDISABLED;
  564.        MyNewMenu[NM_CUSTOM].nm_Flags |= NM_ITEMDISABLED;
  565.        MyNewMenu[NM_CDEPTH].nm_Flags |= NM_ITEMDISABLED;
  566.        TSMorphNewMenu[12].nm_Flags |= NM_ITEMDISABLED;
  567.    }
  568.    if (!OpalBase) {                                // No opal.library so disable opal output formats and input mode
  569.        MyNewMenu[NM_OPAL24].nm_Flags |= NM_ITEMDISABLED;
  570.        MyNewMenu[NM_OPAL24T].nm_Flags |= NM_ITEMDISABLED;
  571.        MyNewMenu[NM_OPAL24F].nm_Flags |= NM_ITEMDISABLED;
  572.        MyNewMenu[NM_OPAL24FT].nm_Flags |= NM_ITEMDISABLED;
  573.        MyNewMenu[NM_OPALJPEG].nm_Flags |= NM_ITEMDISABLED;
  574.        MyNewMenu[NM_OPALJPEGT].nm_Flags |= NM_ITEMDISABLED;
  575.        MyNewMenu[NM_QUALITY].nm_Flags |= NM_ITEMDISABLED;
  576.        MyNewMenu[NM_ILBMOPAL].nm_Flags |= NM_ITEMDISABLED;
  577.    }
  578.    if (!DCTVBase) {                                // no dctv.library so disable dctv output formats
  579.        MyNewMenu[NM_DCTV3].nm_Flags |= NM_ITEMDISABLED;
  580.        MyNewMenu[NM_DCTV4].nm_Flags |= NM_ITEMDISABLED;
  581.    }
  582.    if (CreateIconsR) {                            /* Supplied in CREATEICONSR=    */
  583.       MyNewMenu[NM_ICONSR].nm_Flags |= CHECKED;
  584.    }
  585.    else {
  586.       MyNewMenu[NM_ICONSR].nm_Flags &= ~CHECKED;
  587.    }
  588.    if (GHelp) {                                    /* Supplied in HELP=                */
  589.       MyNewMenu[NM_HELP].nm_Flags |= CHECKED;
  590.    }
  591.    else {
  592.       MyNewMenu[NM_HELP].nm_Flags &= ~CHECKED;
  593.    }
  594.    if (!handle) {                                    // Have not managed to open amigaguide help file
  595.        MyNewMenu[NM_HELP].nm_Flags |= NM_ITEMDISABLED;
  596.    }
  597.    // Switch off all modes except current
  598.     MyNewMenu[NM_MODE1].nm_Flags &= ~CHECKED;
  599.     MyNewMenu[NM_MODE2].nm_Flags &= ~CHECKED;
  600.     MyNewMenu[NM_MODE4].nm_Flags &= ~CHECKED;
  601.     MyNewMenu[NM_MODE8].nm_Flags &= ~CHECKED;
  602.     MyNewMenu[NM_MODE16].nm_Flags &= ~CHECKED;
  603.     if (RenderMode & 1) {
  604.         MyNewMenu[NM_MODE1].nm_Flags |= CHECKED;
  605.     }
  606.     if (RenderMode & 2) {
  607.         MyNewMenu[NM_MODE2].nm_Flags |= CHECKED;
  608.     }
  609.     if (RenderMode & 4) {
  610.         MyNewMenu[NM_MODE4].nm_Flags |= CHECKED;
  611.     }
  612.     if (RenderMode & 8) {
  613.         MyNewMenu[NM_MODE8].nm_Flags |= CHECKED;
  614.     }
  615.     if (RenderMode & 16) {
  616.         MyNewMenu[NM_MODE16].nm_Flags |= CHECKED;
  617.     }
  618.     // switch off all output formats except current
  619.     MyNewMenu[NM_ILBM24].nm_Flags &= ~CHECKED;
  620.     MyNewMenu[NM_OPAL24].nm_Flags &= ~CHECKED;
  621.     MyNewMenu[NM_OPAL24T].nm_Flags &= ~CHECKED;
  622.     MyNewMenu[NM_OPAL24F].nm_Flags &= ~CHECKED;
  623.     MyNewMenu[NM_OPAL24FT].nm_Flags &= ~CHECKED;
  624.     MyNewMenu[NM_OPALJPEG].nm_Flags &= ~CHECKED;
  625.     MyNewMenu[NM_OPALJPEGT].nm_Flags &= ~CHECKED;
  626.     MyNewMenu[NM_PBM].nm_Flags &= ~CHECKED;
  627.     MyNewMenu[NM_BW16].nm_Flags &= ~CHECKED;
  628.     MyNewMenu[NM_BW256].nm_Flags &= ~CHECKED;
  629.     MyNewMenu[NM_HAM6].nm_Flags &= ~CHECKED;
  630.     MyNewMenu[NM_HAM8].nm_Flags &= ~CHECKED;
  631.     MyNewMenu[NM_DCTV3].nm_Flags &= ~CHECKED;
  632.     MyNewMenu[NM_DCTV4].nm_Flags &= ~CHECKED;
  633.     MyNewMenu[NM_ILBM24+SaveFormat].nm_Flags |= CHECKED;
  634.     // switch off all input modes except current
  635.     MyNewMenu[NM_ILBMALWAYS].nm_Flags &= ~CHECKED;
  636.     MyNewMenu[NM_ILBMIFILBM].nm_Flags &= ~CHECKED;
  637.     MyNewMenu[NM_ILBMIFCOLOURS].nm_Flags &= ~CHECKED;
  638.     MyNewMenu[NM_ILBMOPAL].nm_Flags &= ~CHECKED;
  639.     MyNewMenu[NM_ILBMALWAYS+OpenMode].nm_Flags |= CHECKED;
  640. }
  641.